package string;

public class Demo01 {
    public static void main(String[] args) {
  /*String str1 = "hello";   //方式: 按住ctrl, 鼠标点到String

        char value[] = {'h','e','l','l','o'};

        System.out.println(str1);
        System.out.println(value);*/

        /*
        在java程序中, 数据会分为直接量(字面量)和变量
        String类会将直接量(字面量)存放到常量池中.
         */
        /*
        str1因为是直接量, 因此会先在常量池中找有没有对应字符串,
        如果常量池当中没有对应字符串, 程序会在堆中创建一个字符串对象, 并将对应地址存储在常量池中.
         */
        String str1 = "helloword"; //没有, 保存一个
        /*
        str2因为是直接量, 因此也会现在常量池中找对应字符串.
        如果再常量池中找到对应的字符串, 则直接使用已有的字符串对象.
         */
        String str2 = "helloword"; //有, 直接引用
        /*
        因为java程序存在编译阶段(将.java文件加载为.class字节码文件), 编译会对程序进行简单运算.
        "hello"+"word"会被编译为"helloword",
        str3会拿着编译好的"helloword"先去常量池中查找对应字符串, 如果存在, 则直接引用
         */
        String str3 = "hello"+"word"; //直接量+直接量=直接量
        String str4 = "hello";

        String str5 = str4+"word";  //变量+直接量=?直接量
        /*
        str6因为是用new关键字生成的字符串, 而凡是通过new关键字创建的, 一定是一个新的对象
         */
        String str6 = new String("helloword");


        System.out.println( str1 == str2); //true
        System.out.println( str1 == str3); //true
        System.out.println( str1 == str5); //false
        System.out.println( str1 == str6); //false
    }
}
